import {SettingDrawer, Settings as LayoutSettings} from '@ant-design/pro-components';
import {history, Link, useIntl} from '@umijs/max';
import defaultSettings from '../config/defaultSettings';
import routes from '../config/routes';
import { errorConfig } from './requestErrorConfig';
import { currentUser as queryCurrentUser } from '@/services/system/user';
import {AvatarDropdown, AvatarName, Footer} from "@/components";
import {useState} from "react";
import {RunTimeLayoutConfig} from "@@/plugin-layout/types";

const isDev = process.env.NODE_ENV === 'development';
const loginPath = '/login';

/**
 * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
 * */
export async function getInitialState(): Promise<{
    settings?: Partial<LayoutSettings>;
    currentUser?: API.CurrentUser;
    loading?: boolean;
    fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
    routes: any;
}> {
    const fetchUserInfo = async () => {
        try {
            const msg = await queryCurrentUser({
                skipErrorHandler: true,
            });
            return msg.data;
        } catch (error) {
            history.push(loginPath);
        }
        return undefined;
    };
    // 如果不是登录页面，执行
    const { location } = history;
    if (location.pathname !== loginPath) {
        const currentUser = await fetchUserInfo();
        return {
            fetchUserInfo,
            currentUser,
            settings: defaultSettings as Partial<LayoutSettings>,
            routes: routes,
        };
    }
    return {
        fetchUserInfo,
        settings: defaultSettings as Partial<LayoutSettings>,
        routes: routes,
    };
}

// ProLayout 支持的api https://procomponents.ant.design/components/layout
// export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
//     const intl = useIntl();
//     const [collapsed, setCollapsed] = useState(false);
//     return {
//         title: intl.formatMessage({ id: 'layout.title', defaultMessage: 'Developer' }),
//         // actionsRender: () => [
//         //     <Search />,
//         //     <FullScreen />,
//         //     <SelectLang key="SelectLang" />,
//         //     <Theme />,
//         // ],
//         avatarProps: {
//             src: initialState?.currentUser?.avatar,
//             title: <AvatarName />,
//             render: (_, avatarChildren) => {
//                 return <AvatarDropdown>{avatarChildren}</AvatarDropdown>;
//             },
//         },
//         waterMarkProps: false,
//         footerRender: () => <Footer />,
//         onPageChange: () => {
//             const { location } = history;
//             // 如果没有登录，重定向到 login
//             if (!initialState?.currentUser && location.pathname !== loginPath) {
//                 history.push(loginPath);
//             }
//         },
//         bgLayoutImgList: [],
//         links: [],
//         menuHeaderRender: undefined,
//         // 自定义 403 页面
//         // unAccessible: <div>unAccessible</div>,
//         // 增加一个 loading 的状态
//         childrenRender: (children) => {
//             // if (initialState?.loading) return <PageLoading />;
//             return (
//                 <>
//                     {children}
//                     {isDev && (
//                         <SettingDrawer
//                             disableUrlParams
//                             enableDarkTheme
//                             settings={initialState?.settings}
//                             onSettingChange={(settings) => {
//                                 setInitialState((preInitialState) => ({
//                                     ...preInitialState,
//                                     settings,
//                                 }));
//                             }}
//                         />
//                     )}
//                 </>
//             );
//         },
//         // collapsed,
//         // headerContentRender:() => {
//         //     return<>{collapsed ? (
//         //         <MenuUnfoldOutlined onClick={() => setCollapsed(false)}/>
//         //       ) : (
//         //         <MenuFoldOutlined  onClick={() => setCollapsed(true)}/>
//         //       )}<ProBreadcrumb /></>;
//         //   },
//
//         //   collapsedButtonRender: false,
//
//         ...initialState?.settings,
//     };
// };

/**
 * @name request 配置，可以配置错误处理
 * 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。
 * @doc https://umijs.org/docs/max/request#配置
 */
export const request = {
    ...errorConfig,
};
